查看原文
其他

cocker - 使用 C 语言自研对标 Docker 的容器引擎

calvinwilliams 开源中国 2019-01-28

1. 概述

1.1. cocker是什么

cocker是我个人用C语言完全自研的容器引擎(对标Docker阿里Pouch),主要解决如下工作场景中的痛点:

  • 原生支持多进程架构的容器使用模式,无须引入第三方组件。

  • 按虚拟主机方式管理容器,交互式构建镜像,写过复杂Dockerfile的人都深恶痛绝。

  • 镜像多版本共存管理。

  • (更多...)

cocker使用到了以下Linux底层技术:LXCcgroupoverlayfsiptablesptms等。

1.2. 系统架构

在LXC中,容器只是内核命名空间隔离的根进程以及子进程树,隔离域有主机名字、进程空间、根文件系统、IPC、网络等。cocker完整的实现了以上所有隔离域,在容器管理设计上倾向于虚拟主机方式,也支持类似Docker的单进程方式。

cocker自带了容器根进程,负责通过伪终端方式桥接容器内外,而不是必须通过ssh

cgroup负责隔离域的系统资源管控,包括CPU、内存等。

1.2.1. 状态迁移图

cocker镜像可以本地构建或从镜像库上传下载,镜像库目前只支持ssh服务端,后续版本中会加入cocker原生服务器。

cocker镜像允许不同版本共存,创建容器时可以指定镜像版本,或者默认最新版。镜像可以复制和删除,也可以修改版本号。

cocker容器创建出来后可以启动、关闭和销毁。修改容器属性如虚拟IP、端口映射和卷映射必须在容器关闭状态下进行。

cocker镜像可以转化为cocker容器便于交互式修改,然后再转化回来。

1.2.2. 层叠文件系统

层叠文件系统是多镜像容器的存储基础,cocker采用overlayfs作为其层叠文件系统引擎,可以叠加几乎无限的镜像层。

cocker的镜像和容器等都存放在环境变量COCKER_HOME指向的主目录中,所以规划其容量是使用前必须要考虑的问题。如果没有设置环境变量COCKER_HOME,则默认指向/var/cocker

COCKER_HOME主目录中有镜像主目录images、容器主目录containersssh镜像仓库srepo,以及日志文件cocker.log

1.2.3. 网络

cocker支持三种网络模型:HOST、CUSTOM和BRIDGE。

网络模型说明
HOST无预置网络环境,与容器外共享网络环境
CUSTOM仅仅预置网络命名空间,不创建容器内外网卡等,完全由用户自设置
BRIDGE预置以NAT方式的容器向宿主机的网络连接方式,自定义多组指定端口映射转发的宿主机向容器的网络模型

首次执行cocker会创建网桥设备cocker0,网段为166.88.0.x

1.2.4. 系统资源限制

cocker目前只实现了CPU核分配、时间片占用百分比分配、内存分配,其它系统资源在后续版本中会逐渐完善。

1.2.5. 伪终端

自带容器根进程接受客户端cocker连接后会创建伪终端会话,就像登录到虚拟主机上命令交互一样,无需使用ssh

1.3. 快速使用

使用主控工具cocker快速创建一个小型测试镜像,里面调用了自带脚本cocker_install_test.sh构建根文件系统。

然后使用指令-a boot基于刚刚创建的镜像test启动一个容器test,并且直接打开一个会话连接到容器中的伪终端...退出伪终端后,使用指令-a shutdown关闭容器,最后使用指令-a destroy销毁容器。

# cocker -a install_test OK # cocker -s images image_id version modify_datetime size -------------------------------------------------------------------- test _ 2018-11-10T09:21:12 24 MB # cocker -a create -m test -c test OK # cocker -a boot -c test -t connect to container ok --- Welcome to cocker contrainer --- [root@test /root] exit logout # cocker -a shutdown -c test OK # cocker -a destroy -c test OK

项目源码地址和详细使用教程请查看:

https://gitee.com/calvinwilliams/cocker


开源中国征稿开始啦!


开源中国 www.oschina.net 是目前备受关注、具有强大影响力的开源技术社区,拥有超过 200 万的开源技术精英。我们传播开源的理念,推广开源项目,为 IT 开发者提供一个发现、使用、并交流开源技术的平台。


现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:我要投稿


推荐阅读

伯克利开源 Confluo,吞吐量是 Kafka 的 4 到 10 倍

C++ GUI 开发框架 Qt 已支持 Python!

OpenJDK 中脏话太多,开发者看不下去了

MIPS 指令集将在近期开源,RISC-V 阵营慌吗?

2018 年度最受欢迎中国开源软件 TOP20 正式揭晓

点个「好看」分享给更多开发者吧~↓↓↓

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存